package com.sk.skplanet.commute.views;

import java.util.Locale;

import com.sk.skplanet.commute.R;
import com.sk.skplanet.commute.R.id;
import com.sk.skplanet.commute.R.layout;
import com.sk.skplanet.commute.R.menu;
import com.sk.skplanet.commute.R.string;
import com.sk.skplanet.commute.controllers.DialogController;
import com.sk.skplanet.commute.fragments.BusFirstSectionFragment;
import com.sk.skplanet.commute.fragments.StopFirstSectionFragment;
import com.sk.skplanet.commute.fragments.BusFirstSectionFragment.OnBusItemSelectedListener;
import com.sk.skplanet.commute.fragments.StopFirstSectionFragment.OnStopItemSelectedListener;

import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.support.v4.app.FragmentTransaction;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.NavUtils;
import android.support.v4.view.ViewPager;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;

public class AddStopTabbed extends FragmentActivity implements
		ActionBar.TabListener, OnBusItemSelectedListener, OnStopItemSelectedListener {

	/**
	 * The {@link android.support.v4.view.PagerAdapter} that will provide
	 * fragments for each of the sections. We use a
	 * {@link android.support.v4.app.FragmentPagerAdapter} derivative, which
	 * will keep every loaded fragment in memory. If this becomes too memory
	 * intensive, it may be best to switch to a
	 * {@link android.support.v4.app.FragmentStatePagerAdapter}.
	 */
	SectionsPagerAdapter mSectionsPagerAdapter;

	/**
	 * The {@link ViewPager} that will host the section contents.
	 */
	ViewPager mViewPager;
	Bundle extraToResponse;
	Intent intentToResponse;
	String choosedBusCode;
	String choosedBusNo;
	String choosedBusType;
	String choosedStopCode;
	String choosedStopName;
	
	private final int STOP_SELECT = 0;
	private final int BUS_SELECT = 1;

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch(item.getItemId()) {
			case android.R.id.home:
				this.finish();
				break;
			default:
				return false;
		}
		
		return true;
	}
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.add_stop_tabbed);
		
		extraToResponse = new Bundle();
		intentToResponse = new Intent();

		// Set up the action bar.
		final ActionBar actionBar = getActionBar();
		actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
		actionBar.setDisplayHomeAsUpEnabled(true);

		// Create the adapter that will return a fragment for each of the three
		// primary sections of the app.
		mSectionsPagerAdapter = new SectionsPagerAdapter(
				getSupportFragmentManager());

		// Set up the ViewPager with the sections adapter.
		mViewPager = (ViewPager) findViewById(R.id.pager);
		mViewPager.setAdapter(mSectionsPagerAdapter);

		// When swiping between different sections, select the corresponding
		// tab. We can also use ActionBar.Tab#select() to do this if we have
		// a reference to the Tab.
		mViewPager
				.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
					@Override
					public void onPageSelected(int position) {
						actionBar.setSelectedNavigationItem(position);
					}
				});

		// For each of the sections in the app, add a tab to the action bar.
		for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {
			// Create a tab with text corresponding to the page title defined by
			// the adapter. Also specify this Activity object, which implements
			// the TabListener interface, as the callback (listener) for when
			// this tab is selected.
			actionBar.addTab(actionBar.newTab()
					.setText(mSectionsPagerAdapter.getPageTitle(i))
					.setTabListener(this));
		}
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.add_stop_tabbed, menu);
		return true;
	}
	
	@Override
	public void onTabReselected(Tab arg0, android.app.FragmentTransaction arg1) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void onTabSelected(Tab arg0, android.app.FragmentTransaction arg1) {
		mViewPager.setCurrentItem(arg0.getPosition());
	}

	@Override
	public void onTabUnselected(Tab arg0, android.app.FragmentTransaction arg1) {
		// TODO Auto-generated method stub
		
	}
	
	@Override
	public void onBusItemSelected(String busCode, String busName, String busType) {
		choosedBusCode = busCode;
		choosedBusNo = busName;
		choosedBusType = busType;
		
		Intent intent = new Intent(this, AddStopDetailStopList.class);
		Bundle bundle = new Bundle();
		bundle.putString("busCode", choosedBusCode);
		intent.putExtras(bundle);
		startActivityForResult(intent, STOP_SELECT);
	}
	
	@Override
	public void onStopItemSelected(String arsId, String arsName) {
		choosedStopCode = arsId;
		choosedStopName = arsName;
		
		Intent intent = new Intent(this, AddStopDetailBusList.class);
		Bundle bundle = new Bundle();
		bundle.putString("arsId", choosedStopCode);
		bundle.putString("arsName", choosedStopName);
		intent.putExtras(bundle);
		startActivityForResult(intent, BUS_SELECT);
	}

	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
		super.onActivityResult(requestCode, resultCode, intent);
		if(resultCode == RESULT_OK) {
			extraToResponse = new Bundle();
			intentToResponse = new Intent();
			
			if(requestCode == BUS_SELECT) {
				choosedBusCode = intent.getStringExtra("busCode");
				choosedBusNo = intent.getStringExtra("busName");
			} else if(requestCode == STOP_SELECT) {
				choosedStopCode = intent.getStringExtra("stopCode");
				choosedStopName = intent.getStringExtra("stopName");
			}
			
			choosedBusType = intent.getStringExtra("busType");
			
			extraToResponse.putString("stopName", choosedStopName);
			extraToResponse.putString("stopCode", choosedStopCode);
			extraToResponse.putString("busName", choosedBusNo);
			extraToResponse.putString("busCode", choosedBusCode);
			extraToResponse.putString("busType", choosedBusType);
			intentToResponse.putExtras(extraToResponse);
			this.setResult(RESULT_OK, intentToResponse);
			this.finish();
		}
		//finish();
	}



	/**
	 * A {@link FragmentPagerAdapter} that returns a fragment corresponding to
	 * one of the sections/tabs/pages.
	 */
	public class SectionsPagerAdapter extends FragmentPagerAdapter {

		public SectionsPagerAdapter(FragmentManager fm) {
			super(fm);
		}

		@Override
		public Fragment getItem(int position) {
			// getItem is called to instantiate the fragment for the given page.
			// Return a DummySectionFragment (defined as a static inner class
			// below) with the page number as its lone argument.
			Fragment fragment;
			
			switch(position) {
				case 0:
					fragment = new BusFirstSectionFragment();
					break;
				case 1:
					fragment = new StopFirstSectionFragment();
					break;
				default:
					fragment = new BusFirstSectionFragment();
					break;
			}
			
//			Bundle args = new Bundle();
//			args.putInt(DummySectionFragment.ARG_SECTION_NUMBER, position + 1);
//			fragment.setArguments(args);
			return fragment;
		}

		@Override
		public int getCount() {
			// Show 2 total pages.
			return 2;
		}

		@Override
		public CharSequence getPageTitle(int position) {
			Locale l = Locale.getDefault();
			switch (position) {
			case 0:
				return getString(R.string.title_section1).toUpperCase(l);
			case 1:
				return getString(R.string.title_section2).toUpperCase(l);
			}
			return null;
		}
	}
}
